// 导航守卫
import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  // 如果存在token
  // 1、想去登录页强制跳转到主页，如果去其他页面直接放行
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/')
    } else {
      // 每个页面都需要获取到用户信息，在正常跳转到其他页面之前，要先获取到用户信息
      // {}默认隐式转换为true，所以不可以直接用是否由对象来判断是否取数据
      // 每次发送请求之前都先判断一下state.profile是否存有数据，避免经常发请求--性能优化
      if (Object.keys(store.state.user.profile).length === 0) {
        // 保证获取数据后再跳转，去获取自定义指令。否则会出现一个情况，跳转页面后获取了自定义指令，再去获取数据，数据图片的null对象会覆盖原本的图片
        await store.dispatch('user/getProfile')
        // 在跳转到页面之前判断路由
        const perm = store.state.user.profile.roles.menus
        const res = await store.dispatch('permission/filterRouter', perm)
        console.log(res)
        // 添加动态路由
        router.addRoutes([
          ...res,
          { path: '*', redirect: '/404', hidden: true }
        ])
        return next(to.path)
      }
      next()
    }
  } else {
    // 如果不存在token
    // 分情况，设置白名单，进入白名单放行
    const whiteList = ['/login', '/404', '/test']
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      next('/login')
    }
  }
})
